package football_behaviour

import (
	"encoding/json"
	"longmen/server/config/global"
	"longmen/server/internal/services/nami/services/sports/football"
	"longmen/server/pkg/db/mysql/models/models_sports"
)

type (
	MatchApiResponse struct {
		Code  int `json:"code"`
		Query struct {
			Total int    `json:"total"`
			Type  string `json:"type"`
		} `json:"query"`
		Results struct {
			Match []Match `json:"match"`
			//Competition []struct {
			//	ID   int    `json:"id"`
			//	Name string `json:"name"`
			//	Logo string `json:"logo"`
			//} `json:"competition"`
			//Team []struct {
			//	ID   int    `json:"id"`
			//	Name string `json:"name"`
			//	Logo string `json:"logo"`
			//} `json:"team"`
		} `json:"results"`
	}
	Scores []int
	Match  struct {
		ID            int    `json:"id"`             // 比赛id
		SeasonID      int    `json:"season_id"`      // 赛季id
		CompetitionID int    `json:"competition_id"` // 赛事id
		HomeTeamID    int    `json:"home_team_id"`   // 主队id
		AwayTeamID    int    `json:"away_team_id"`   // 客队id
		StatusID      int32  `json:"status_id"`      // 比赛状态，详见状态码->比赛状态
		MatchTime     int64  `json:"match_time"`     // 比赛时间
		Neutral       int    `json:"neutral"`        // 是否中立场，1-是、0-否
		Note          string `json:"note"`           // 备注
		// 比分字段说明
		// example：[1, 0, 0, 0, -1, 0, 0]
		//	Enum:
		//		Array[7]
		//		0:"比分(常规时间) - int"
		//		1:"半场比分 - int"
		//		2:"红牌 - int"
		//		3:"黄牌 - int"
		//		4:"角球，-1表示没有角球数据 - int"
		//		5:"加时比分(120分钟，即包括常规时间比分)，加时赛才有 - int"
		//		6:"点球大战比分(不包含常规时间及加时赛比分)，点球大战才有 - int"
		HomeScores   Scores `json:"home_scores"`   // 主队比分字段说明 example：[1, 0, 0, 0, -1, 0, 0]
		AwayScores   Scores `json:"away_scores"`   // 客队比分字段说明 example：[1, 0, 0, 0, -1, 0, 0]
		HomePosition string `json:"home_position"` // 主队排名
		AwayPosition string `json:"away_position"` // 客队排名
		Coverage     struct {
			Mlive        int `json:"mlive"`        // 是否有动画，1-是、0-否
			Intelligence int `json:"intelligence"` // 是否有情报，1-是、0-否
			Lineup       int `json:"lineup"`       // 是否有阵容，1-是、0-否
		} `json:"coverage"`               // 动画、情报、阵容 字段
		VenueID   int `json:"venue_id"`   // 场馆id
		RefereeID int `json:"referee_id"` // 裁判id
		RelatedID int `json:"related_id"` // 双回合中另一回合比赛id
		// 双回合常规时间(包括加时时间)总比分 字段说明
		// example：[3, 6]
		//	Enum:
		//	Array[2]
		//	0:"主队比分 - int"
		//	1:"客队比分 - int"
		AggScore  Scores `json:"agg_score"` // 双回合常规时间(包括加时时间)总比分 字段说明  example：[3, 6]
		UpdatedAt int    `json:"updated_at"`
	}
)

func (r MatchApiResponse) Interface() []football.InsertMatchInterface {
	a := make([]football.InsertMatchInterface, 0)
	for _, record := range r.Results.Match {
		a = append(a, record)
	}
	global.Log.Info("count : ", len(r.Results.Match))
	return a
}

func (c Match) Get() models_sports.FootballMatch {
	return models_sports.FootballMatch{
		ID:            c.ID,
		SeasonID:      c.SeasonID,
		CompetitionID: c.CompetitionID,
		HomeTeamID:    c.HomeTeamID,
		AwayTeamID:    c.AwayTeamID,
		StatusID:      models_sports.FootBallMatchStatus(c.StatusID),
		MatchTime:     c.MatchTime,
		Neutral:       c.Neutral,
		Note:          c.Note,
		HomeScores:    c.HomeScores.String(),
		AwayScores:    c.AwayScores.String(),
		HomePosition:  c.HomePosition,
		AwayPosition:  c.AwayPosition,
		Mlive:         c.Coverage.Mlive,
		Intelligence:  c.Coverage.Intelligence,
		Lineup:        c.Coverage.Lineup,
		VenueID:       c.VenueID,
		RefereeID:     c.RefereeID,
		RelatedID:     c.RelatedID,
		AggScore:      c.AggScore.String(),
		UpdatedAt:     c.UpdatedAt,
	}
}

func (s Scores) String() string {
	marshal, _ := json.Marshal(s)
	return string(marshal)
}
